package com.rickpan.service;

import com.rickpan.entity.Team;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Optional;

/**
 * 团队服务接口
 */
public interface TeamService {

    /**
     * 创建团队
     */
    Team createTeam(Team team);

    /**
     * 根据ID查找团队
     */
    Optional<Team> findById(Long id);

    /**
     * 根据创建者ID查找团队
     */
    List<Team> findByCreatorId(Long creatorId);

    /**
     * 获取用户参与的所有团队
     */
    List<Team> findTeamsByUserId(Long userId);

    /**
     * 分页查询团队
     */
    Page<Team> findAll(Pageable pageable);

    /**
     * 更新团队信息
     */
    Team updateTeam(Team team);

    /**
     * 删除团队
     */
    void deleteTeam(Long id);

    /**
     * 审核团队
     */
    Team approveTeam(Long id);

    /**
     * 拒绝团队
     */
    Team rejectTeam(Long id);

    /**
     * 检查用户是否为团队创建者
     */
    boolean isTeamCreator(Long teamId, Long userId);

    /**
     * 检查团队是否存在
     */
    boolean existsById(Long id);

    /**
     * 根据状态查找团队（分页）
     */
    Page<Team> findByStatus(Team.Status status, Pageable pageable);

    /**
     * 获取团队设置
     */
    Team getTeamSettings(Long teamId);

    /**
     * 更新团队设置
     */
    Team updateTeamSettings(Long teamId, com.rickpan.dto.request.TeamSettingsRequest request);

    /**
     * 检查团队是否对用户可见
     */
    boolean isTeamVisibleToUser(Long teamId, Long userId);

    /**
     * 根据可见性查找团队
     */
    Page<Team> findByVisibility(Team.Visibility visibility, Pageable pageable);
}
